//Revised from
//STL Tutorial and Reference Guide C++ Programming with the Standard Template L
ibrary, 2nd Edition
//by David R. Musser (Author), Atul Saini (Author)
//# Publisher: Addison-Wesley Pub (Sd) (March 1996)
//# Language: English
//# ISBN-10: 0201633981
//# ISBN-13: 978-0201633986


#include <iostream>
#include <string>
#include <set>
using namespace std; 

bool less1(const string& x, const string& y)
{
  return x < y;
}

bool greater1(const string& x, const string& y)
{
  return x > y;
}

int main()
{
  typedef set<string, pointer_to_binary_function<const string&, const string&,bool> >  set_type1;

  set_type1 set1(ptr_fun(less1));

  set1.insert("the");
  set1.insert("quick");
  set1.insert("brown");
  set1.insert("fox");

  set_type1::iterator i;
  for (i = set1.begin(); i != set1.end(); ++i) 
    cout << *i << " ";
  cout << endl;
  
  set_type1 set2(ptr_fun(greater1));

  set2.insert("the");
  set2.insert("quick");
  set2.insert("brown");
  set2.insert("fox");

  for (i = set2.begin(); i != set2.end(); ++i) 
    cout << *i << " ";
  cout << endl;
  return 0;
}
